<?
	require_once(dirname(__FILE__)."/incluir.php");
	require_once(dirname(__FILE__)."/dados.php");
	require_once(dirname(__FILE__)."/RegrasValidacao.php");
	// ###################################
	// # Classe com funções de validação #
	// ###################################
	class Validador
	{
		// Função de Validação valida de acordo com o array de validação e os dados passados por parametro
		public static function valida($dados, $campos) 
		{
			$erros = array();
			foreach($campos as $index => $campo) {
				$suffix = $campo->sufixo;
				
				// Verifica que tem o valor do campo em $dados, se não tiver continua a validação pulando esse campo
				if(isset($dados[$index]) || isset($dados[$index.$suffix])) 
				{
					if(!$campo->valida($dados)) // Se não validou
					{
						$erros[$index] = $campo->mensagem_erro; // pega a mensagem de erro e coloca no array $erro
					}
				}
			}
			
			return $erros;
		}
		
		
		// O array de validacoes é um array cujos elementos estão no seguinte formato:
		// nome <- apenas um nome passado
		// nome => array(tipo, mensagens_erro, campo_compara) campo_compara só serve se o valor desse campo deve ser igual ao valor de outro campo
		// Os tipos podem ser: data, file, password, telefone, text, textarea, select, numero
		// mensagens_erro é um array aonde cada mensagem é para uma validação diferente, a primeira será para notEmpty
		public static function valida_array($dados, $validacoes_info, &$erros)
		{
			$campos = array(); // Irá montar instancias de campo e passará para a função valida
			foreach($validacoes_info as $field => $informacoes)
			{
				if(is_array($informacoes)) // Se entrar nesse if o valor de $informacoes está na forma: array(tipo, mensagem_erro, campo_compara)
				{
					// Cria o campo
					$tipo = $informacoes[0];
					$mensagens_erro = $informacoes[1];
					$campo_compara = $informacoes[2];
					$validacoes = Validacao::acha_validacao_array($field, $tipo, $mensagens_erro, $campo_compara);
					$campo = new Campo($field, '', $tipo, '', '', false, array(), $validacoes);
				}
				else // Se não $informacoes vale o nome do campo
				{
					$tipo = 'text';
					$field = $informacoes; // coloco o nome do campo na variavel $field para facilitar o uso
					$validacoes = Validacao::acha_validacao_array($field, $tipo);
					$campo = new Campo($field, '', $tipo, '', '', false, array(), $validacoes);
				}
				$campos[$field] = $campo;
			}
			$erros = Validador::valida($dados, $campos);
			return empty($erros); // se não teve erros, então significa que validou
		}
		
		public static function __callStatic($name, $arguments) 
		{
			require_once(dirname(__FILE__)."/RegrasValidacao.php");
			call_user_func($name, $arguments);
		}
	}
?>